System.register([], function () {
	'use strict';
	return {
		execute: function () {

			const wrapper = {
				foo() {
					console.log(this);
				}
			};

			// Indirectly called member expressions set the callee's context to global "this"
			( 0, wrapper.foo)();
			( 0, wrapper.foo )();
			(0, wrapper.foo)();
			( ( 0, wrapper.foo))();
			( ( 0, wrapper.foo ))();
			( (0, wrapper.foo))();

			// Only callees of call expressions should be wrapped
			console.log( wrapper.foo);

			// Indirectly invoked eval is executed in the global scope
			function testEval() {
				console.log(( 0, eval)('this'));
				console.log(( 0, eval )('this'));
				console.log((0, eval)('this'));
			}

			testEval.call('test');

		}
	};
});
